#include "il2cpp-config.h"
#include "metadata/GenericSharing.h"
#include "vm/Type.h"
#include "metadata.h"

using il2cpp::vm::Type;

namespace il2cpp
{
namespace metadata
{

	bool GenericSharing::IsShareable (Il2CppGenericClass* gclass)
{
	const Il2CppGenericInst* classInst = gclass->context.class_inst;
	if (classInst)
	{
		for (uint32_t i = 0; i < classInst->type_argc; ++i)
		{
			if (!Type::IsReference (classInst->type_argv[i]))
				return false;
		}
	}

	return true;
}

bool GenericSharing::IsShareable (Il2CppGenericMethod* gmethod)
{
	const Il2CppGenericInst* methodInst = gmethod->context.method_inst;
	if (methodInst)
	{
		for (uint32_t i = 0; i < methodInst->type_argc; ++i)
		{
			if (!Type::IsReference (methodInst->type_argv[i]))
				return false;
		}
	}

	return true;
}

} /* namespace vm */
} /* namespace il2cpp */
